#---------------------------------------
# Do include(s) if root level, skip if not.
#---------------------------------------
ifeq ($(MAKELEVEL),0)
ifneq ($(strip $(PROJ_ROOT)),)
ifneq ($(strip $(PROJ_INCS)),)
PROJ_INC := $(subst \,/,$(addprefix $(PROJ_ROOT)/,$(PROJ_INCS)))
.PHONY: $(PROJ_INC)
include $(PROJ_INC)
endif
endif
endif

ifeq ($(COMMAND_MAK),)
$(error Make macros undefined. Check PROJ_ROOT and PROJ_INCS)
endif

include $(PROJ_ROOT)\specific.mak

#---------------------------------------
# Targets to ignore for implicit dependencies.
#---------------------------------------
.PHONY: all clean extra_clean update zip
.PHONY: makefile FORCE

#---------------------------------------
# Process directories, targets, and dependencies.
#---------------------------------------
ifeq ($(strip $(MAKECMDGOALS)),)
MAKECMDGOALS := all
endif

export PATH_DIR	:= $(shell cd )
export LIST_DIR	:= $(subst /,$(SPACE),$(subst \,$(SPACE),$(PATH_DIR)))
export CURR_DIR	:= $(word $(words $(LIST_DIR)),$(LIST_DIR))
export MSG_DIR	:= $(subst &,_,$(PATH_DIR))

# Check for recursion; not if =
ifeq ($(CVAR),)

# Set build targets
export TRGS		:= $(sort $(shell $(LS) $(PARM_LS) /ad))

# Skip processing if doing a clean or update
ifneq ($(filter-out clean extra_clean update,$(MAKECMDGOALS)),)

ifneq ($(TRGS),)
export LIST_ALL	:= $(subst \,/,$(subst $(PATH_DIR)\,,$(shell $(LS) $(PARM_LS_SUBS) *.$(DFF) *.$(TEX))))
export LILC_ALL	:= $(shell echo $(LIST_ALL)|$(TR) [:upper:] [:lower:])
export LIJO_ALL	:= $(join $(addsuffix =,$(LIST_ALL)),$(LILC_ALL))
endif

endif	# Skip processing

# Set update targets
export TRGS_UPD := $(foreach VAR,$(TRGS),$(subst /,\,$(addprefix $(VAR)\,*.$(TXD) $(PATH_DFF)\*.$(DFF))))
export DEST_DIR := $(subst /,\,$(PROJ_ROOT)\$(PATH_DST)\$(CURR_DIR))

# Set clean targets
export TRGS_CLN := $(foreach VAR,$(TRGS),$(addprefix $(VAR)\,$(basename $(FILE_TXD)).* $(PATH_TEX)\*.$(TGX)))
export TRGS_CLX := 

else	# Check for recursion

# Set various lists for current target
DFF_LIST := $(subst =,,$(filter %=,$(subst =,=$(SPACE),$(filter $(addprefix %=,$(filter $(shell echo $(CVAR)/$(PATH_DFF)/%.$(DFF)|$(TR) [:upper:] [:lower:]),$(LILC_ALL))),$(LIJO_ALL)))))
TEX_LIST := $(subst =,,$(filter %=,$(subst =,=$(SPACE),$(filter $(addprefix %=,$(filter $(shell echo $(CVAR)/$(PATH_TEX)/%.$(TEX)|$(TR) [:upper:] [:lower:]),$(LILC_ALL))),$(LIJO_ALL)))))
TGX_LIST := $(TEX_LIST:.$(TEX)=.$(TGX))

# Set intermediate build-targets
TXD_FILE := $(CVAR)/$(addsuffix .$(TXD),$(basename $(FILE_TXD)))
RTD_FILE := $(CVAR)/$(addsuffix .$(RTD),$(basename $(FILE_TXD)))
TXL_FILE := $(CVAR)/$(addsuffix .$(TXL),$(basename $(FILE_TXD)))

endif	# Check for recursion

SHOWPROG := @rem

.PRECIOUS: 
.SUFFIXES:

.PHONY: $(TEX_NEED)

#---------------------------------------
# Make specified targets.
#---------------------------------------
all:
ifneq ($(strip $(PROJ_LOG)),)
	@echo$(PROJ_LOG) $(MSG_DATE)
	@echo$(PROJ_LOG) $(MSG_TIME) $(MSG_MAKING) $(MSG_DIR)
endif
	$(foreach VAR,$(TRGS),@$(MAKE) $(PARM_MAKE_QUIET) $(FILE_TXD) CVAR="$(VAR)"$(NEWLINE))
ifneq ($(strip $(PROJ_LOG)),)
	@echo$(PROJ_LOG) $(MSG_TIME) $(MSG_MAKING) $(MSG_DIR) $(MSG_COMPLETE)
endif
	@echo $(MSG_MAKING) $(MSG_DIR) $(MSG_COMPLETE)

clean:
	$(foreach VAR,$(TRGS_CLN),@if exist $(VAR) $(RM) $(VAR)$(NEWLINE))
	@echo $(MSG_CLEANING) $(MSG_DIR) $(MSG_COMPLETE)

extra_clean: clean
	$(foreach VAR,$(TRGS_CLX),@if exist $(VAR) $(RM) $(VAR)$(NEWLINE))

update:
	$(foreach VAR,$(TRGS),@if not exist $(DEST_DIR)\$(VAR) $(MKDIR) $(DEST_DIR)\$(VAR)$(NEWLINE))
ifneq ($(strip $(PROJ_LOG)),)
	$(foreach VAR,$(TRGS_UPD),@if not exist $(VAR) echo$(PROJ_LOG) $(MSG_ERROR) $(MSG_NOTFOUND): `$(VAR)'$(NEWLINE))
endif
	$(foreach VAR,$(TRGS_UPD),@if not exist $(VAR) echo $(MSG_ERROR) $(MSG_NOTFOUND): `$(VAR)'$(NEWLINE))
	$(foreach VAR,$(TRGS_UPD),@$(CP) $(VAR) $(DEST_DIR)\$(firstword $(subst \,$(SPACE),$(VAR))) $(PARM_UPDATE)$(NEWLINE))
	@echo $(MSG_UPDATING) $(PATH_SRC)\$(CURR_DIR) TO $(PATH_DST)\$(CURR_DIR) $(MSG_COMPLETE)

#zip:
#	@if not exist $(TARGET_DIR)\$(ZIL_FILE) $(MKDIR) $(TARGET_DIR)\$(ZIL_FILE)
#	$(foreach VAR,$(TRGS_ZIP),@$(CP) $(VAR) $(TARGET_DIR)\$(ZIL_FILE) $(PARM_UPDATE)$(NEWLINE))
#	@echo $(MSG_ZIPLIST) $(MSG_DIR) $(MSG_COMPLETE)
#	$(foreach VAR,$(TDEL_ZIP),@$(RM) $(TARGET_DIR)\$(VAR)$(NEWLINE))

$(FILE_TXD): $(TXD_FILE)
ifneq ($(strip $(PROJ_LOG)),)
	@if "$(strip $(DFF_LIST))"=="" echo$(PROJ_LOG) $(MSG_ERROR) $(MSG_NOTFOUND) $(MSG_MODEL): `$(CVAR)'
	@if "$(strip $(TEX_LIST))"=="" echo$(PROJ_LOG) $(MSG_ERROR) $(MSG_NOTFOUND) $(MSG_TEXTURE): `$(CVAR)'
endif
	@if "$(strip $(DFF_LIST))"=="" echo $(MSG_ERROR) $(MSG_NOTFOUND) $(MSG_MODEL): `$(CVAR)'
	@if "$(strip $(TEX_LIST))"=="" echo $(MSG_ERROR) $(MSG_NOTFOUND) $(MSG_TEXTURE): `$(CVAR)'
	@echo `$(CVAR)' $(MSG_COMPLETE)

$(TXD_FILE): $(RTD_FILE)
	$(SHOWPROG) Making TXD "$@"
	$(subst /,\,if exist $< echo>$@ 0)
	$(subst /,\,if exist $< $(CP) $< $@) $(PARM_CP)

$(RTD_FILE): $(TGX_LIST)
	$(SHOWPROG) Making RTD "$@"
	$(subst /,\,if exist $(TXL_FILE) $(GENTXDICT) $(TXL_FILE) -x)

$(TGX_LIST): $(TXL_FILE) $(TEX_LIST)
	$(SHOWPROG) Making TGX "$@"
	@$(ICV) $(PARM_ICV_SPEC) $(subst /,\,$(TXL_FILE))

$(TXL_FILE): $(DFF_LIST)
	$(SHOWPROG) Making TXL "$@"
	@echo>$(subst /,\,$@) cd $(CVAR)/$(PATH_TEX)
	$(foreach VAR,$(TEX_LIST),@echo>>$(subst /,\,$@) $(TEX) $(notdir $(VAR)),0,0$(NEWLINE))

